Computer systems typically include two or more computers networked together to allow the sharing of applications, resources, services and information by a number of users. Applications running in this de-centralized environment need information about the system from time to time, including, for example, information about users, host name resolution, passwords, and file system mount points. Typically, a network service known as a “directory service” (traditionally, also “name service”) is used to store, maintain, and provide this information to client programs in the system. A directory service typically keeps track of all resources on a network and makes this information available to users and applications. For example, when a user logs on, the login program on the local computer may communicate with the directory service to check the user's password or other authentication information. The local computer may further communicate with the directory service to obtain information about the user's permissions in the network.
A directory service includes a database where the directory data is stored, as well as programs for administering the database and programs for communicating with client applications. The directory service may be implemented on one or more servers on the network. A process is a running instance of a program. Typically, processes requiring directory services call a look-up function to access the requisite directory information. The look-up function may be included in a C library of standard functions that are available in the system. In some systems, the look-up function involves making a request directly to the remote directory server over the network using conventional protocol-based communications. The directory server receives the request, looks up the requested data in the database, and transmits a response to the client process. Directory service requests between the client and the directory service are costly in terms of network resources. This type of communication requires active participation by both the requesting client and the responding directory server. The directory server receives the requests over a dedicated socket or port and must constantly be checking for communications over that port. Additionally, a number of client requests in a short period of time can overload the directory server. The response time may become unacceptable or the server may even crash. If the directory services are implemented on the main network server, the whole network may come to a halt. Accordingly, reliance on a centralized, server-based directory service can result in slow operation or total network failure during periods of heavy use. The directory service response time may not be within acceptable limits, for example due to a backlog of requests, or network delays. This problem increases as the size of the network and the number of processes running on the system increase. Making requests of the directory service can also be inefficient because the same data is often accessed repeatedly.
One solution to the problem of providing directory services efficiently involves caching the retrieved data locally on one or more machines, so that after a first lookup of particular data from the directory server by a caching program, all local processes can retrieve that data locally by communicating with the caching program. After the initial access, for each subsequent access of that particular data, the necessary communication is restricted to local inter-process communication between the requesting process and the caching program. This local communication is faster than communication with a directory server over a network. This technique suffers from the drawback that the operating system has to perform a number of potentially costly operations: the request must be transmitted from process to process, the caching program must be given the opportunity to run and produce the result, and the result must be provided to the requesting process. This may slow down the other processes running on the system. The centrally-managed cache may still be a bottleneck.